最後一天說說心得與檢討,在客戶提供大禮包後,要求用在A2A系統的磨合過程是一波三折,最後開發上軌道時,也才用了Quadlet的.container、.network這兩類檔案就能滿足專案需求。其它Quadlet類型的檔案反而是為了這次的鐵人賽額外去學,而且發文順序上也出現了本末倒置的情況,昨天發文用Podman Desktop的Podman machine開發Quadlet,應該排在離線安裝Podman之前講,才方便只有筆電的邦友入門,不管作業系統是Mac還是Windows。而我是因為目前A2A專案在進行,就直接用RedHat的VM做研究。
終於結束!灑花!
內容太少,交差不好看。就加個附錄
【附錄:Windows的服務化】
Podman Desktop的Podman machine的作業系統是Fedora CoreOS,支援systemd,但若拿Windows作為系統主機的作業系統,不適合再透過Podman Desktop一層對Podman machine包成Windows服務,而Windows服務是由sc操作,角色等同systemd的systemctl,這部份可參照筆者著作:作業系統的專武。
所以是直接對容器包成Windows服務,無法享用Quadlet的generator的好處。
目前較常見把java或容器包成Windows服務套件有三:
其中最不推薦第三個,它是Tomcat和JBoss預設的服務包裝套件,筆者在兩個系統遇過,一個是關不掉JBoss服務,另一個服務啟動了,但Spring Boot沒有啟動,後來改成WinSW解決,而AI也推薦用WinSW將容器包裝成服務:
從https://github.com/winsw/winsw/releases 下載WinSW.exe
這個WinSW.exe檔檔名改成a2a-batch.exe,並建一個a2a-batch.xml,如下:
<service>
<id>a2a-batch</id>
<name>A2A Batch</name>
<description>Run a2a-batch Podman container as Windows Service</description>
<executable>powershell.exe</executable>
<arguments>-ExecutionPolicy Bypass -File C:\services\a2a-batch\start.ps1</arguments>
<stopexecutable>powershell.exe</stopexecutable>
<stoparguments>-ExecutionPolicy Bypass -File C:\services\a2a-batch\stop.ps1</stoparguments>
<logpath>C:\services\a2a-batch\logs</logpath>
<logmode>roll</logmode>
</service>
其中ID值就是Windows服務唯一識別值。
位在C:\services\a2a-batch的PowerShell內容如下:
啟動的script,這要確定a2a-batch這個容器已載入podman了。
# start.ps1
podman machine start
podman start a2a-batch
關閉的script
# stop.ps1
podman stop a2a-batch
接著將a2a-batch安裝成Windows服務:
a2a-batch.exe install
啟動:
a2a-batch.exe start
移除服務:
a2a-batch.exe uninstall
而對服務的維運有分CMD、Powershell以及a2a-batch.exe的操作,如下:
| CMD(用sc) | PowerShell | a2a-batch.exe | |
|---|---|---|---|
| 啟動 | sc start a2a-batch | Start-Service a2a-batch | a2a-batch.exe start |
| 停止 | sc stop a2a-batch | Stop-Service a2a-batch | a2a-batch.exe stop |
| 狀態 | sc queryex a2a-batch | Get-Service a2a-batch | a2a-batch.exe status |
| 移除 | sc delete a2a-batch | Remove-Service a2a-batch | a2a-batch.exe uninstall |